/*
 * Clase en la que se realizan las operaciones
 * de retirar e ingresar dinero de la cuenta
 */

package daw_ed04_actividad;

/**
 *
 * @author Jose Lorenzo Cameselle Escribano
 */
public class CCuenta {


    /**
     * Variable de tipo String del nombre del titular de la cuenta
     */
    private String nombre;
    /**
     * Variable de tipo String del código de cuenta
     */
    private String cuenta;
    /**
     * Variable de tipo double que se corresponde con el saldo de la cuenta
     */
    private double saldo;
    /**
     * Variable de tipo double que se corresponde al tipo de interés
     * asociado a la cuenta.
     */
    private double tipoInterés;

    /**
     * Constructor vacío
     */
    public CCuenta()
    {
    }

    /**
     * Constructor que recibe los parámetros necesarios para inicializar las
	 * variables de la clase cuando se instancie
     * @param nom es el parámetro para inicializar la variable nombre
     * @param cue es el parámetro para inicializar la variable cuenta
     * @param sal es el parámetro para inicializar la variable saldo
     * @param tipo es el parámetro para inicializar la variable tipoInteres
     */
    public CCuenta(String nom, String cue, double sal, double tipo)
    {
        nombre =nom;
        cuenta=cue;
        saldo=sal;
    }

    /**
     * Método que llama a otro setter para asignar a la variable nombre
	 * el valor pasado como parámetro
     * @param nom es un parámetro String para almacenar en la variable nombre
     */
    public void asignarNombre(String nom)
    {
        setNombre(nom);
    }

    /**
     * Método que llama al geter para obtener la variable nombre
     * @return devuelve el valor de la variable nombre
     */
    public String obtenerNombre()
    {
        return getNombre();
    }

    /**
     * Método que llama a otro método para obtener el saldo de la cuenta
     * @return devuelve el saldo de la cuenta por medio del getter getSaldo
     */
    public double estado()
    {
        return getSaldo();
    }

    /**
     * Método que añade cantidades a la variable saldo
     * @param cantidad a añadir al saldo
     * @throws Exception es una Excepción que se lanza cuando se introduce
	 * una cantidad negativa
     */
    public void ingresar(double cantidad) throws Exception
    {
        if (cantidad<0)
            throw new Exception("No es posible ingresar una cantidad negativa");
        setSaldo(getSaldo() + cantidad);
    }

    /**
     * Método para restar cantidades a la variable saldo
     * @param cantidad a restar al saldo	 
     * @throws Exception que se lanza cuando se intenta restar una cantidad
	 * negativa o cuando se intenta restar una cantidad superior al saldo.
     */
    public void retirar(double cantidad) throws Exception
    {
        if (cantidad <= 0)
            throw new Exception ("No es posible retirar una cantidad negativa");
        if (estado()< cantidad)
            throw new Exception ("No hay suficiente saldo");
        setSaldo(getSaldo() - cantidad);
    }

    /**
     * Método que llama a otro que devuelve el número de cuenta
     * @return devuelve el número de cuenta
     */
    public String obtenerCuenta()
    {
        return getCuenta();
    }

    /**
     * Método que devuelve el contenido de la variable nombre
     * @return valor de la variable nombre
     */
    public String getNombre() {
        return nombre;
    }

    /**
     * Método que asigna a la variable nombre el String pasado como parámetro
     * @param nombre variable de tipo String que se pasa como parámetro
	 * para almacenar en el atributo de la clase nombre.
     */
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    /**
     * Método que devuelve el tipo de interés de la cuenta
     * @return contenido de la variable tipoInteres
     */
    public double getTipoInterés() {
        return tipoInterés;
    }

    /**
     * Método setter que almacena el tipo de interés en el atributo tipoInterés
     * @param tipoInterés es el parámetro que almacena en el atributo de clase tipoInterés
     */
    public void setTipoInterés(double tipoInterés) {
        this.tipoInterés = tipoInterés;
    }

    /**
     * Método para saber el número de cuenta
	 * @return que devuelve el valor del atributo de clase cuenta
     */
    public String getCuenta() {
        return cuenta;
    }

    /**
     * Método para almacenar el número de cuenta
	 * @param cuenta es el parámetro que almacena el número de cuenta en el
	 * atributo de clase cuenta
     */
    public void setCuenta(String cuenta) {
        this.cuenta = cuenta;
    }

    /**
     * Método para obtener el saldo de la cuenta
	 * @return que devuelve el valor del atributo de clase saldo
     */
    public double getSaldo() {
        return saldo;
    }

    /**
     * Método para asignar un saldo inicial a la cuenta
	 * @param saldo es el parámetro para asignar al atributo de clase saldo
     */
    public void setSaldo(double saldo) {
        this.saldo = saldo;
    }
}
